/*
 * CS_TELEPORT_LOCATION.cpp
 *
 *  Created on: 2013. 12. 27.
 *      Author: mega
 */

#include "../../User.h"
#include "../../Command.h"
#include "../../NLogic/Space.h"
#include "../../NLogic/Battle.h"

namespace ProjectZ { namespace NCommand {

void Command::CS_TELEPORT_LOCATION(User * pUser, ::Network::Packet * pPacket)
{
/*	// 좌표 순간이동처리 예외처리
	// 서버에서는 별도의 요청이 없어도 PVP, 배틀로얄, 던젼 플레이에서 재접속 시 내려줌
	CS_TELEPORT_LOACATION	0x0520
	{
		u8	u8is_monster;		// 공격자의 몬스터여부 (0 : 주인공 1: 몬스터)
		u32 u32gid;
		u16 u16pos_x;
		u16 u16pos_y;
	}

	SC_TELEPORT_LOACATION	0x0521
	{
		u8	u8is_monster;		// 공격자의 몬스터여부 (0 : 주인공 1: 몬스터)
		u32 u32gid;
		u16 u16pos_x;
		u16 u16pos_y;
	}*/

	PREPARE_PACKET;

	uint8_t is_monster	= 0;
	uint32_t userseq	= 0;
	uint16_t posx		= 0;
	uint16_t posy		= 0;

	*pPacket >> is_monster >> userseq >> posx >> posy;

	NLogic::Space * pSpace = pUser->GetSpace();
	if (NULL == pSpace)
	{
		DEBUGLOG("CS_TELEPORT_LOCATION : pSpace is NULL!");
		return;
	}

	if (false == pSpace->IsDungeon())
	{
		DEBUGLOG("CS_TELEPORT_LOCATION : INVALID SPACE TYPE. space=%d", pSpace->GetData()._spaceType);
		return;
	}

	if (1 == is_monster)
		return;

	NLogic::Battle * pBattle = pUser->GetBattle();
	if (NULL == pBattle)
	{
		DEBUGLOG("CS_TELEPORT_LOCATION : pBattle is NULL!");
		return;
	}

	pBattle->GetData().x = posx;
	pBattle->GetData().y = posy;

	::Network::Packet * pNoti = ::Network::GETPACKETPOOL()->SEND_NEW();
	*pNoti << is_monster << userseq << posx << posy;
	pNoti->MakePacket(CMD_SC_TELEPORT_LOACATION);
	pSpace->SendAll(pNoti);
}

} /*NCommand*/ } /*ProjectZ*/
